﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio.Entidades;
using Dominio.Logica;
using Dominio.Excepciones;
using System.Reflection;
using InterfazPublica;

namespace Interfaz
{
    public partial class ABMEntidadesJuego : Form
    {
        int opcion;

        public ABMEntidadesJuego()
        {
            InitializeComponent();
        }

        public ABMEntidadesJuego(int opcion)
        {
            this.opcion = opcion;
            InitializeComponent();
        }

        private void ABMEntidadesJuego_Load(object sender, EventArgs e)
        {
            switch (opcion)
            {
                case 1: //Alta Juego
                    CargaAltaJuegos();
                    break;
                case 2: //Baja Juego
                    CargaBajaJuegos();
                    break;
            }
        }

        private void btnImportar_Click(object sender, EventArgs e)
        {
            string ruta = "";
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Biblioteca de Archivos |*.dll";
            openFileDialog.ShowDialog();
            ruta = ruta + openFileDialog.FileName;
            openFileDialog.FileName = "";
            txtRutaAssembly.Text = ruta;
        }

        private void btnGuardarEntidad_Click(object sender, EventArgs e)
        {
            Juegos juego = new Juegos();
 
            AgenciaEntities contexto = Contexto.GetContexto();
            string rutaAssembly = txtRutaAssembly.Text.ToString();
            try
            {
                juego = Agencia.GetAgencia().CargarAssembly(rutaAssembly);
                ManejadorLog.GetLog().Grabar("OK: Se ha cargado correctamente el juego: " + juego.Descripcion + " Acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                MessageBox.Show("Se ha guardado el juego: " + juego.Descripcion + " correctamente", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            catch (ExistingJuegoException ex)
            {
                ManejadorLog.GetLog().Grabar("ERROR: No se puede cargar el juego porque ya existe en la base de datos, acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                MessageBox.Show(ex.mensaje, "Atención", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (InvalidJuegoException ex) 
            {
                ManejadorLog.GetLog().Grabar("ERROR: No se puede cargar el juego no tiene una interfaz válida , acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                MessageBox.Show(ex.mensaje, "Atención", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (BadImageFormatException ex) 
            {
                ManejadorLog.GetLog().Grabar("ERROR: Se ha intentado cargar una dll no válida, Acción realizada por usuario: " + Agencia.GetAgencia().UsuarioLogueado);
                MessageBox.Show("No se puede cargar este juego, archivo no valido: ", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void CargaAltaJuegos()
        {
            btnGuardarEntidad.Visible = true;
            btnBorrar.Visible = false;
            pictureBox1.Visible = true;
            pictureBox2.Visible = false;
            pictureBox3.Visible = false;
            label1.Visible = true;
            label3.Visible = false;
            label4.Visible = false;
            comboBox1.Enabled = false;
            comboBox1.Visible = false;
            comboBox2.Visible = false;
        }

        private void CargaBajaJuegos() 
        {
            pictureBox1.Visible = false;
            pictureBox2.Visible = false;
            pictureBox3.Visible = true;
            label1.Visible = false;
            label3.Visible = true;
            comboBox1.Visible = true;
            txtRutaAssembly.Visible = false;
            label2.Visible = false;
            btnImportar.Visible = false;
            comboBox2.Visible = false;
            label4.Visible = false;
            comboBox1.DataSource = Agencia.GetAgencia().ListaJuegos;
            btnGuardarEntidad.Visible = false;
            btnBorrar.Visible = true;
        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            Juegos Juegos = (Juegos)comboBox1.SelectedItem;
            Juegos.BajaJuego();
            
        }
    }
}
